﻿/*! @file
********************************************************************************
<PRE>
文 件 名    : TransMain.cs
说    明    : 负责转换
作    者    : 汪泽然
--------------------------------------------------------------------------------
备    注    : 
--------------------------------------------------------------------------------
修改记录: 
 * 日   期      版  本       修改人      修改内容 
 * 2009-7-11    0.5.0       汪泽然       实现对插件的检测功能
</PRE>
********************************************************************************
* 版权所有(c) 2008 ~ 2009, 汪泽然, 保留所有权利
*******************************************************************************/
using System;
using Wangzeran.Transform.Core.ITransform;
using Wangzeran.Transform.Core.PlugIn;
using Wangzeran.Transform.Core.TransformException;
using Wangzeran.Transform.Core.Sample;
using Wangzeran.Transform.Core.Support;

namespace Wangzeran.Transform.Code
{
    /// <summary>
    /// 负责转换
    /// </summary>
    public abstract class TransMain
    {
        /// <summary>
        /// 获取 解决方案文件 的版本
        /// </summary>
        /// <param name="filePath">解决方案文件路径</param>
        /// <returns>True：转换成功  False：转换失败</returns>
        /// <exception cref="InvalidPlugInException">检测到无效插件的异常</exception>
        /// <exception cref="BaseException">转换的所有异常</exception>
        public static string GetSlnVersion(string filePath)
        {
            try
            {
                // 用简单实现的类获取文件版本
                BaseSlnFile opSlnFile = new SlnFile();

                return opSlnFile.GetVersion(filePath);
            }
            catch (InvalidPlugInException ex)
            {
                throw ex;
            }
            catch (BaseException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new TransformFailureException(filePath, ex.Message);
            }
        }


        /// <summary>
        /// 转换
        /// </summary>
        /// <param name="factoryName">要转换的目标版本的工厂名</param>
        /// <param name="filePath">解决方案文件路径</param>
        /// <returns>True：转换成功  False：转换失败</returns>
        /// <exception cref="InvalidPlugInException">检测到无效插件的异常</exception>
        /// <exception cref="BaseException">转换的所有异常</exception>
        public static bool Transform(string factoryName, string filePath)
        {
            try
            {
                // 根据工厂名，获取要转换的工厂
                BaseTransformFactory factory = PlugIns.RegisterPlugIns[factoryName];

                if (factory == null)
                {
                    throw new InvalidPlugInException(factoryName);
                }

                return factory.Transform(filePath);
            }
            catch (InvalidPlugInException ex)
            {
                throw ex;
            }
            catch (BaseException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new TransformFailureException(factoryName, filePath, ex.Message);
            }

        }

    }
}
